package pe.com.empresa.web.actions.articulos;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import pe.com.empresa.utiles.ActionHelper;
import pe.com.empresa.utiles.Constantes;
import pe.com.empresa.utiles.EstadoOperacion;
import pe.com.empresa.utiles.GrillaArticulos;

public class GrillaArticulosAction extends ActionHelper {

	private static final long serialVersionUID = -5348638654678062486L;
	//Detalle
	private GrillaArticulos articulo;
	//json
	private String stringJson;
	
	//
	private EstadoOperacion estadoOperacion;
	
	@SuppressWarnings("unchecked")
	public String agregarArticulo(){
		
		//System.out.println(articulo);
				
		if(articulo.getCantidadArticulo() != null && articulo.getPrecio() !=null){
			articulo.setSubTotal(new BigDecimal(articulo.getPrecio().doubleValue() * articulo.getCantidadArticulo().doubleValue()));
		}
		System.out.println(articulo.getPrecio());
		
		estadoOperacion = new EstadoOperacion();
				
		List<GrillaArticulos> grillaArticulos = (ArrayList<GrillaArticulos>) this.getSessionContext().getAttribute(Constantes.SESION_GRILLA_ARTICULOS);
		
		if(grillaArticulos==null){
			grillaArticulos = new ArrayList<GrillaArticulos>();
		}
		
		if(this.buscarArticuloEnGrilla(grillaArticulos, articulo.getCodigoArticulo())){
				estadoOperacion.setEstadoOperacion(Constantes.OP_EXCEPTION);
				estadoOperacion.setMensajeEstado("[ERROR] El articulo ya existe en la grilla.");
		}else{
			articulo.setFlag("n");
			grillaArticulos.add(articulo);
			estadoOperacion.setEstadoOperacion(Constantes.OP_SUCCESS);
			this.getSessionContext().setAttribute(Constantes.SESION_GRILLA_ARTICULOS, grillaArticulos);
		}
		
		
		this.stringJson = this.toJson(estadoOperacion);
		
		return SUCCESS;
	}
	
	@SuppressWarnings("unchecked")
	public String modificarArticulo(){
		estadoOperacion = new EstadoOperacion();
		List<GrillaArticulos> grillaArticulos = (ArrayList<GrillaArticulos>) this.getSessionContext().getAttribute(Constantes.SESION_GRILLA_ARTICULOS);
		
		if(grillaArticulos!=null){
			
			for(GrillaArticulos g : grillaArticulos){
				if(articulo.getCodigoArticulo().equals(g.getCodigoArticulo())){
					

						if(g.getCantidadArticulo().intValue() >= (articulo.getCantidadAfectada().equals("")? 0 : Integer.parseInt(articulo.getCantidadAfectada()))){
							
							g.setCantidadAfectada(articulo.getCantidadAfectada());
							g.setFechaVencimiento(articulo.getFechaVencimiento());
							g.setDescripIncidencia(articulo.getDescripIncidencia());
							
							estadoOperacion.setEstadoOperacion(Constantes.OP_SUCCESS);
							
						}else{
							estadoOperacion.setEstadoOperacion(Constantes.OP_EXCEPTION);
							estadoOperacion.setMensajeEstado("Error: La cantidad afectada debe ser menor a la cantidad de articulos.");
						}
						
				}
			}
			getSessionContext().setAttribute(Constantes.SESION_GRILLA_ARTICULOS, grillaArticulos);
		}
			

			this.stringJson = this.toJson(estadoOperacion);
		
		return SUCCESS;
	}
	
	@SuppressWarnings("unchecked")
	public String eliminarArticulo(){
				
		List<GrillaArticulos> grillaArticulos = null;
		grillaArticulos = (ArrayList<GrillaArticulos>) this.getSessionContext().getAttribute(Constantes.SESION_GRILLA_ARTICULOS);
		int index=-1;
		if(grillaArticulos != null){
			System.out.println(grillaArticulos.toString());
			for(int i=0;i<grillaArticulos.size();i++){
				if(grillaArticulos.get(i).getCodigoArticulo().equals(articulo.getCodigoArticulo())){
					index = i;
				}
			}
			if(index != -1){
				grillaArticulos.remove(index);
			}
		}
		
		this.getSessionContext().setAttribute(Constantes.SESION_GRILLA_ARTICULOS, grillaArticulos);
		
		estadoOperacion = new EstadoOperacion();
		estadoOperacion.setEstadoOperacion(Constantes.OP_SUCCESS);
		stringJson = this.toJson(estadoOperacion);
		
		return SUCCESS;
	}
	
	@SuppressWarnings("unchecked")
	public String obtenerGrillaArticulos(){
		List<GrillaArticulos> grillaArticulos = (ArrayList<GrillaArticulos>) this.getSessionContext().getAttribute(Constantes.SESION_GRILLA_ARTICULOS);
		this.stringJson = this.toListJson(grillaArticulos);
		return SUCCESS;
	}

	public String getStringJson() {
		return stringJson;
	}

	public void setStringJson(String stringJson) {
		this.stringJson = stringJson;
	}

	public EstadoOperacion getEstadoOperacion() {
		return estadoOperacion;
	}

	public void setEstadoOperacion(EstadoOperacion estadoOperacion) {
		this.estadoOperacion = estadoOperacion;
	}

	public GrillaArticulos getArticulo() {
		return articulo;
	}

	public void setArticulo(GrillaArticulos articulo) {
		this.articulo = articulo;
	}

}
